import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
import unittest
from selenium.webdriver.support.select import Select


class MyTestCase(unittest.TestCase):
    driver = None

    @classmethod
    def setUpClass(cls) -> None:
        service = Service(executable_path="../driver/geckodriver.exe")
        cls.driver = webdriver.Firefox(service=service)

    def test_select(self):
        """测试 下拉框中选项的选择"""
        self.driver.get("http://127.0.0.1:8080/testhtml/exam/House.html")

        # 在网页中 想要选择下拉列表中中的选项时  有两种 方式

        #     1、通过选择 定位的方式进行 选择  不推荐
        #     2、使用 容器的方式 来选择 下拉 列表框中的 选项
        # self.driver.find_element(By.XPATH, "//option[@value='w2']").click()

        zjfw = self.driver.find_element(By.NAME, "list2")
        select = Select(zjfw)
        # 如果  将 选项所在的标签 添加 到 容器中，我们就可以使用 容器中 自带的方法
        # 来选择容器里的某一个选项
        # select.select_by_index(2)  # 通过 选项索引值（下标）选择   0
        # select.select_by_value('w2')  # 通过选项中 的属性 value的 属性值来进行选择
        select.select_by_visible_text('4000')  # 通过选项 在页面中实际显示的文本值来选择

    def test_select_is_mutiple(self):
        """测试 下拉框中选项的选择"""
        self.driver.get("http://127.0.0.1:8080/testhtml/exam/House.html")

        wylb = self.driver.find_element(By.NAME, "list1")
        wylb_select = Select(wylb)
        zjfw = self.driver.find_element(By.NAME, "list2")
        zjfw_select = Select(zjfw)

        # 判断 两个下拉列表框是否支持多选
        print('物业类别是否支持多选：', '支持多选' if wylb_select.is_multiple else '不支持多选')
        print('租金范围是否支持多选：', '支持多选' if zjfw_select.is_multiple else '不支持多选')

        # 获得 zjfw 容器中的 所有的选项的 值
        for item in zjfw_select.options:
            print(item.text)

    @classmethod
    def tearDownClass(cls) -> None:
        # cls.driver.close()
        # cls.driver.quit()
        pass


if __name__ == '__main__':
    unittest.main()
